Глава 23

Безопасность приложения

ColdFusion поддерживает несколько уровней безопасности.

Редакции ColdFusion Server — Professional и Enterprise — включают в себя средство Advanced Security, которое обеспечивает масштабируемую, гранулярную защиту для построения и разворачивания ваших приложений ColdFusion.

Безопасность Remote Development Services

Тип безопасности Remote Development Services (ColdFusion RDS security) предоставляет услуги защиты разработчикам, использующим ColdFusion Studio. RDS security лежит в основе безопасности коллективно-ориентированной среды разработки ColdFusion, в которой группам разработчиков, создающим приложения в ColdFusion Studio, требуются различные уровни доступа к файлам и ресурсам данных ColdFusion.

Когда вы работаете в ColdFusion Studio, вы обращаетесь к ресурсам дистанционно, открывая cfm-файлы, или обращаясь к источникам данных. RDS security идентифицирует вас и предоставляет вам доступ к ресурсам соответственно логике. Идентификация производится по домену Windows NT, источнику данных ODBC или протоколу LDAP (Lightweight Directory Access Protocol), определенному на странице "ColdFusion Administrator", как часть контекста защиты.

Существуют два способа применения службы RDS security:

Таким образом, будучи администратором сервера ColdFusion, вы можете задавать конфигурацию службы RDS security так, чтобы она наилучшим образом соответствовала потребностям вашей сетевой группы.

Пользовательская безопасность

Служба пользовательской защиты (User security) идентифицирует пользователей, когда они входят в приложение ColdFusion, и потом присваивает привилегии, базируясь на групповом членстве или иных определенных вами критериях. Например, допустим, что вы используете ColdFusion для построения внутренней сети вашей компании, а в последствии как ведущий узел для созданной внутренней сети. Отдел кадров поддерживает страницу в Internet, на которой все служащие могут своевременно получить информацию о компании, например о ее политике, предстоящих событиях и рабочих местах. Вы хотите, чтобы каждый мог прочесть информацию, но лишь определенные сотрудники отдела кадров могли дополнять, обновлять или удалять сведения.

Помимо этого, вы, вероятно, захотите предоставить вашим сотрудникам возможность просматривать специализированную информацию об их заработной плате, разрядах, отзывы о качестве работы. Вы, конечно, не захотите, чтобы один служащий смотрел конфиденциальную информацию о другом, но предпочтете, чтобы менеджеры могли просматривать и, возможно, обновлять сведения о своих подчиненных. Система абонентской безопасности идентифицирует и авторизует пользователей каждый раз, когда они пытаются получить доступ или работать с уязвимыми данными.

Система пользовательской защиты состоит из двух компонентов:

Прежде чем вы сможете использовать систему пользовательской Защиты в своих приложениях, вы должны убедиться, что ваш администратор ColdFusion установил повышенную безопасность на сервере и задал конфигурацию базы защиты, соответствующую вашему приложению. После того как база защиты сконфигурирована, вы можете кодировать свойства защиты в ваших приложениях ColdFusion.

Реализация расширенной безопасности на страницах приложения

Средство Advanced Security (Расширенная безопасность) облегчает разработчикам осуществление защиты приложения. После того как ваш администратор установит соответствующие контексты защиты для вашего приложения, вы сможете начать пользоваться тегами защиты ColdFusion и функциями идентификации пользователей, чтобы видеть, авторизован ли доступ в ту часть приложения, куда они пытаются войти.

Чтобы использовать теги защиты, функции идентификации и авторизации пользователей и открывать либо отказывать в доступе к ресурсам, в соответствии с правилами контекста защиты следует:

Кодирование страниц приложения

В качестве дополнительной меры безопасности вы можете кодировать строки в ваших приложениях при помощи функций Encrypt (зашифровать) и Decrypt (расшифровать), как это было продемонстрировано в разд. "Шифрование пользовательских паролей" гл. 16.

Функции идентификации и авторизации

После того как вы с помощью тега <CFAUTHENTICATE> проверите, определен ли данный пользователь для какого-либо контекста безопасности, вы можете использовать следующие функции защиты во всем вашем приложении в любое время, когда вам потребуется распознать или авторизовать пользователя:

Функция IsAuthenticated

Функция isAuthenticated проверяет, успешно ли выполнен тег <CFAUTHENTICATE> по текущему запросу. Если нет, она ищет cookie cfauth, чтобы определить, идентифицирован ли пользователь. Если указан атрибут SETCOOKIE="NO" в сочетании с тегом <CFAUTHENTICATE>, то вы должны вызывать тег <CFAUTHENTICATE> при каждом запросе в приложении.

Функция isAuthenticated возвращает True, если пользователь идентифицирован для текущего запроса, в противном случае функция возвращает False.

Если вызывается функция isAuthenticated с произвольным параметром security_context_name, то возвращается значение True, если пользователь идентифицирован в указанном контексте защиты, в противном случае функция возвращает False,

Функция isAuthenticated имеет следующий синтаксис:

IsAuthenticated([security_context_name])

Функция IsAuthorized

После идентификации пользователя вы можете вызвать функцию IsAuthorized, чтобы проверить, к каким ресурсам допущен данный пользеватель. Вы определяете уровни авторизации, когда создаете стратегии безопасности в разделе Advanced Security (Расширенная безопасность) на страницы администратора "ColdFusion Administrator".

Функция isAuthorized возвращает True, если конкретному .пользователю разрешена указанная операция в заданном ресурсе ColdFusion.

Функция isAuthorized включает три параметра и имеет следующий синтаксис:

IsAuthorized(ResourceType, ResourceName, [Action])

Например, чтобы проверить, разрешено ли идентифицированному пользователю производить выборки из источника данных, называемого Cruise, укажите:

IsAuthorized("Datasource", "Cruise", "Select")

В этом примере функция isAuthorized возвращает True, если пользователю разрешено производить выборку из указанного источника данных, или если этот источник данных не защищен в контексте защиты.

В табл. 23.1 представлены типы ресурсов ColdFusion в соответствии с возможными действиями.

Таблица 23.1. Типы ресурсов функции isAuthorizen

Тип ресурса

Действия

APPLICATION

ALL USECLIENTVARIABLES

CFML

Применимые действия к тегу, указанному в качестве

ResourceName

FILE

READ WRITE

DATASOURCE

ALL

CONNECT SELECT INSERT UPDATE DELETE

SP (от англ, stored procedure — хранимая процедура)

COMPONENT

He имеет действий

COLLECTION

DELETE OPTIMIZE PURGE SEARCH UPDATE

 

Тип ресурса

Действия

CUSTOMTAG

Не имеет действий

USEROBJECT

Действия, определяемые на странице "ColdFusion Administrator"

Function

Не имеет действий

User

Не имеет действий

 

Примечание

Сервер ColdFusion Server не проверяет авторизацию пользователя без специального запроса с помощью функции isAuthorized. В зависимости от результатов выполнения этой функции вы сами решаете, как действовать дальше.

Тег <CFAUTHENTICATE>

Синтаксис:

<CFAUTHENTICATE SECURITYCONTEXT = "SecurityContext"

USERNAME = "User_ID"

PASSWORD = "Password"

SETCOOKIE = "Yes | No"

THROWONFAILURE = "Yes | No"

AUTHTYPE = "Basic | X509">

В табл. 23.2 представлено описание атрибутов тега <CFAUTHENTICATE>.

Таблица 23.2. Описание атрибутов тега <CFAUTHENTICATE>

Атрибут

Описание

SECURITY CONTEXT

USERNAME PASSWORD

Контекст безопасности. Обязательный атрибут. Описывает, какой контекст безопасности нужно использовать для идентификации и авторизации. Этот контекст должен быть определен в разделе Advanced Security (Расширенная безопасность) на странице администратора "ColdFusion Administrator"

Имя пользователя. Обязательный атрибут для получения доступа к защищенным ресурсам

Пароль пользователя. Обязательный атрибут для получения доступа к защищенным ресурсам

Атрибут

Описание

SETCOOKIE

Индикатор установки cookie для помещения в нем информации об идентификации. Возможные значения:

• Yes — да (по умолчанию); • NO — нет. Необязательный атрибут

THROWON FAILURE

Показывает, выдавать ли ColdFusion сообщение об ошибке типа SECURITY (безопасность), если идентификация не проходит. Возможные значения:

• Yes — да (по умолчанию); • NO — нет. Необязательный атрибут

AUTHTYPE

Тип установления подлинности. Возможные значения:

• Basic (по умолчанию); • Х509. Необязательный атрибут

Например:

<CFAUTHENTICATE SECURITYCONTEXT = "MySecurityContext"

USERNAME = "Anna" PASSWORD = "****">

Если пользователь в системе еще не определен, ColdFusion выдает ошибку защиты. Вы можете или отказать в доступе к ресурсу или перенаправить пользователя на страницу регистрации. Например, вы можете вывести форму регистрации и потом, если пользователь успешно войдет в систему, вывести первоначально запрашиваемую им страницу.

Тег < CFIMPERSONAТЕ>

Синтаксис:

<CFIMPERSONATE SECURITYCONTEXT = "SecurityContext"

USERNAME = "Name" PASSWORD = "Password" TYPE = "CF | OS">

HTML- или CFML-код выполнения </CFIMPERSONATE>

В табл. 23.3 представлено описание атрибутов тега <CFIMPERSONATE>.

Таблица 23.3. Описание атрибутов тега <CFIMPERSONATE>

Атрибут

Описание

SECURITYCONTEXT

Контекст безопасности. Обязательный атрибут. Описывает, какой контекст безопасности нужно использовать для идентификации и авторизации. Этот контекст может быть определен в разделе Advanced Security (Расширенная безопасность) на странице администратора "ColdFusion Administrator", если атрибут TYPE принимает значение CF, и может быть определен в домене Windows NT, соответственно, если атрибут TYPE принимает значение os

USERNAME

Имя пользователя. Обязательный атрибут

PASSWORD

Пароль пользователя. Обязательный атрибут

TYPE

Показывает тип реализации, который нужно применить. Возможные значения:

• CF — для уровня приложения; • OS— для уровня операционной системы.

Реализация уровня приложения позволяет вам получить права пользователя ColdFusion по заданному контексту защиты. Реализация уровня операционной системы позволяет получить права пользователя Windows NT по заданному домену Windows NT. Реализация уровня операционной системы в настоящее время недоступно для UNIX.

Обязательный атрибут

 

Тег <CFIMPERSONATE> предоставляет разработчикам ColdFusion способ безопасно выполнить сегмент кода. Этот тег полезен, когда вы хотите кратковременно предоставить тип доступа, в котором обычно отказываете. Допустим, вы провайдер Internet-услуг, который предоставляет услуги по разработке ColdFusion. Вы предоставляете комплект клиентских тегов, позволяющих вашим пользователям добавлять возможности, такие как счетчики обращений к странице, гостевые книги, доски объявлений в создаваемые ими приложения ColdFusion. Для предоставления таких функций вы также должны открыть доступ к некоторым ресурсам, которые предпочли бы защитить. Использование тега <CFIMPERSONATE> открывает доступ к этим функциям в безопасном режиме путем "упаковки" функций в клиентский тег.

Например, как провайдер Internet-услуг, вы конечно не захотите, чтобы ваши клиенты имели доступ к тегу <CFFILE> на ваших серверах. Однако, если вы предоставляете клиентам доску объявлений, то должны позволить им записывать собственные объявления, в системно поддерживаемые файлы, в данном случае — файл, где содержится список объявлений. Вы можете предоставить доску объявлений в пользовательском (custom) теге, в который включен тег <CFFILE>. Для гарантии, что пользовательский тег имеет доступ к тегу <CFFILE>, пользователю необходимо оказать доверительное отношение, пока выполняется тег, и вернуться назад к пользователю без оказанного доверия после того, как будет выполнен "правильный" фрагмент кода.

В следующем примере построенная конструкция с помощью тега <CFIMPERSONATE> позволяет нам в защищенный файл записать определенный текст, потому что пользователю ColdFusion по имени Anna был предоставлен доступ к файлу по контексту защиты MySecurityContext:

<CFIMPERESONATE SECURITYCOUTEXT = "MySecurityContext"

USERNAME = "Anna"

PASSWORD = "****" TYPE = "CF">

<CFFILE ACTION = "Write"

FILE = "C:\Apache\htdocs\MyLineCruises\BoardAnnouncements.cfm"

OUTPUT = "#strAnnounce#"> </CFIMPERESONATE>

Для выявления исключительных ситуаций безопасности вы можете использовать теги <CFTRY> и <CFCATCH>, задав тип исключительной ситуации Security тега <CFCATCH>, позволяющего выявить сбои. Для получения информации по стратегиям обработки ошибок см. главу 15.

Резюме

Подведем итог. В данной главе вы познакомились с CFML-тегами <CFAUTHENTICATE>, <CFIMPERSONATE> и функциями IsAuthenticated, IsAuthorized.